// FileName :q.go
// ime :2024/3/27 18:36
// Author :syr030111
package main


import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func reverseString(input string) string {
	runes := []rune(input)
	//由于Go中的string类型是基于字节的，并且是不可变的，我们不能直接修改字符串中的字符。
	//因此，我们需要将字符串转换为一个可修改的rune切片。
	//rune是Go中的一个别名，代表int32类型，它足够大，可以表示Unicode中的任何字符。

	for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
		//我们初始化两个索引变量i和j，分别指向字符串的第一个和最后一个字符。
		runes[i], runes[j] = runes[j], runes[i]
	}
	//使用for循环来遍历字符串，并在每次迭代中交换i和j索引位置的字符。
	// 由于我们是从两端向中间交换字符，所以只需要遍历到i < j为止。

	return string(runes)
} //当所有的字符都交换完毕之后，将修改后的rune切片转换回string类型，并返回这个逆转后的字符串。

func main() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("请输入任意字符串: ")

	input, _ := reader.ReadString('\n') // 读取用户输入的字符串
	input = strings.TrimSpace(input)    // 去除字符串两端的空白字符，包括空格和换行符

	a := reverseString(input) //给a赋值输入的字符串逆转后得到的逆转字符串

	fmt.Println("原字符串:", input)
	fmt.Println("逆转后的字符串:", a) //打印结果，可检查过程是否出错

	// 检查是否为回文
	if a == input {
		fmt.Println("该字符串是回文")
	} else {
		fmt.Println("该字符串不是回文")
	}
}

